package whut.edu.inner;
/*
内部类：
1.成员内部类
    创建对象格式：   Outer.Inter oi = new Outer().new Inter();
    成员访问细节：
        1.内部类中，访问外部类成员：直接访问，包括私有
        2.外部类中，访问内部类成员，需要创建对象访问
2.静态内部类
    前边加个static，Outer.Inner oi = new Outer.Inner()
    静态只能访问静态
3.局部内部类
    放在方法、代码块、构造器等执行体中
4.匿名内部类（重要！！！）

*/
public class InnerTest {
    public static void main(String[] args) {
        Outer.Inter oi = new Outer().new Inter();
        System.out.println(oi.num);
        oi.show();
        System.out.println("---------------");
        MyOut.MyInner my = new MyOut().new MyInner();
        my.show();
    }
}
    //面试题
    class MyOut {
        int num = 10;

        class MyInner {
            int num = 20;

            public void show() {
                int num = 30;
                System.out.println(num);//30
                System.out.println(this.num);//20
                System.out.println(MyOut.this.num);//10!!!!!!!
            }
        }
    }

    class Outer {
        int x = 15;

        private void method() {
            System.out.println("类中方法");
            //想访问内部类的东西，需要new内部类对象
            Inter i = new Inter();
            System.out.println(i.num);
        }

        class Inter {
            int num = 10;

            public void show() {
                System.out.println("内部类show方法");
                //内部类可以直接调用大类中的方法或变量
                System.out.println(x);
                method();
            }
        }
    }